package com.itheima.ui;

import com.itheima.dao.IAccountDao;
import com.itheima.service.IAccountService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 模拟一个表现层，用于调用业务层
 */

public class Client {

    /**
     * 获取spring的ioc核心容器，并根据id获取对象
     * @param args
     */
    public static void main(String[] args) {

        /**
         * ApplicationContext的三个常用的实现类：
         *  ClassPathXmlApplicationContext:可以加载类路径下的配置文件，要求配置文件必须是在类路径下。不在的话，加载不了。
         *  FileSystemXmlApplicationContext：可以加载磁盘任意路径下的配置文件（必须有访问权限）。
         *  AnnotationConfigApplicationContext：用于读取注解创建容器的。
         *
         *核心容器的两个接口引发的问题
         * ApplicationContext：
         * 它在构建核心容器时，创建对象采取的策略是采用立即加载的方式，也就是说，只要一读取完配置文件马上就创建配置文件中的配置对象
         * BeanFactory:
         * 它在构建核心容器时，创建对象采取的策略是采用延迟加载方式，也就是说，什么时候根据id获取对象，什么时候才真正的创建对象。
         *
         */
        //1.获取核心容器对象
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");

        IAccountService accountService = (IAccountService) context.getBean("accountService");
        IAccountDao accountDao = context.getBean(IAccountDao.class);

        System.out.println(accountService);
        System.out.println(accountDao);
    }
}
